2024 Canadian Grand Prix¶

Bonjour les gestionnaires and welcome to the Fantasy League report for the 2024 Canadian Grand Prix. Historically one of the most exciting circuits on the Grand Prix calendar, Canada has thrown up some absolute bangers in the past. The one that springs to mind, at least in the modern era of formula 1 is the 2011 Canadian Grand Prix that was interrupted by the weather that caused absolute chaos, won eventually by Jenson Button, who was at some stage dead last and had multiple incidents throughout the race, only taking the lead on the last lap as Sebastian Vettel lost it on the last lap. Another is the famous Vettel-Hamilton moment during the 2019 Canadian Grand Prix where Vettel again made a mistake whilst leading the race and ran over the grass into turn 3/4 and rejoined leaving just enough room for a car. The stewards deemed this an unsafe rejoin and handed the 4-time champion a 5-second penalty. This handed the win to Hamilton, but those famous images of Sebastian moving the number 1 board to where his car should have been will forever live in my memory. Anyway, let's get into the race report.

The big news on the block this week was the sudden departure of Alpine's Esteban Ocon. The Frenchman supposedly agreed to part ways with the French outfit at the end of the 2024 season, having also signed a new contract elsewhere on the grid (his words not the team's). It's oddly suspicious after the comments made in Monaco by Famin, who said "there will be consequences". It's unusual for a team to announce the departure of a driver, it's usually the other way around. Whether Esteban was already thinking of leaving, or if he really has found another drive, it's oddly coincidental that it would be announced this week. If he has truly found another drive, where could it be? As far as we know, there are no seats in teams further up the grid, so it would have to be a Kick Sauber to partner Hulkenberg, or a Haas to partner Magnussen or Bearman, or at the Williams team to partner Albon. We await the news I'm sure.

Speaking of that Williams seat, rumours have been circling that Carlos Sainz is the target for James Vowles, who has seemingly done a complete U-turn on giving Sargeant a chance. Yes the American driver has had some disaster races recently, but it seems that finally the last chance has been given and they are now openly targeting Carlos. If that's the case, then we still need to fill the seats at Alpine, Mercedes, Kick Sauber, and Haas going forward, with it highly likely that Liam Lawson will be in the RB seat alongside Yuki Tsunoda. The Japanese star resigned for another year earlier in the week too, just after it was announced that Sergio Perez has extended his tenure at Red Bull Racing with a 1 + 1 contract with exit clauses. The 2025 grid is beginning to take shape and so far there are no new faces appearing, but hopefully we get some rookies in next year to make things exciting again.

In [ ]:
import os
import subprocess
import src.dataIO as io
import src.webDataIO as wio

from pathlib import Path

year = 2024
race = 'Canada'

Grand Prix Report¶

Free practice was dominated by the weather, with much of the running curtailed due to tyre usage limitations. Many of the teams expecting a wet race, and thus didn't want to run too much in the wet weather in practice and burn through their tyres. Lando Norris, Fernando Alonso, and Lewis Hamilton topped free practice, with not a Red Bull or Ferrari in sight. In fact, Ferrari had an absolute shocker of a weekend, coming down from the success at Monaco pretty hard. Don't worry, I'm going to get into it in this report. Keep in mind that Lewis topped final practice, because there's some good conspiracy theory stories coming in the next few paragraphs.

Sprint Qualifying¶

No Sprint Qualifying To Report.

In [ ]:
#wio.outputs_sq_data(
#    year=year,
#    race=race)

Sprint Race¶

No Sprint Race To Report.

In [ ]:
#wio.outputs_sprint_data(
#    year=year,
#    race=race)

Qualifying Report¶

The weather held off for qualifying, with all of the running taking place in perfect Canadian sunshine. The biggest shock exit in Q1 was of course, Nico Hulkenberg, who has qualified well all season long in that Haas. Qualifying has become such a strong point for the American team that it almost seems a shock when they make an early exit. Nico was just not on it and couldn't get a good lap together, and honestly I think it ruined his weekend because they really could have made something of themselves this week. He was joined by both Kick Sauber drivers, no surprise there as Guanyu Zhou is the only driver to not make it out of Q1 all season long, and the Kick doesn't look like much of a car still even at this point in the season. Esteban Ocon, carrying a 5-place grid penalty from his antics at Monaco, only managed eighteenth and started last anyway. Oh and Sergio Perez also failed to make it into Q2, which isn't even surprising anymore. The Mexican driver has just fallen off a cliff lately and isn't able to get anything out of that monster machinery. You really have to start asking, why are Red Bull continuing to put their faith in him?

Qualifying two, for me at least, is where the pain begins. That's right, we're Ferrari bashing. Charles Leclerc and Carlos Sainz could only manage P11 and P12, falling so hard after succeeding so much in Monaco. The Ferrari didn't have the best of pace all weekend anyway, but both of them were out in the dying minuted of qualifying on used tyres. It was certainly an odd choice from the Italian outfit, and one that not even Charles could deal with. In the media pen after qualifying, he can be seen being shown what to say by the Ferrari media team and then quickly saying "no" and saying something along the lines of "I will be honest". The frustration was clear, and it really didn't help either of their weekends, but it was going to get much much worse. They were joined by Kevin Magnussen and Pierre Gasly, and a super performance by Logan Sargeant who managed to get through to a very rare Q2 appearance.

With all that settled, it was time for the final part of qualifying, and it looked to be between Lewis Hamilton, Max Verstappen, and Lando Norris for that pole position. Lewis had been quick all qualifying but could only manage seventh place. And here is where the conspiracy theory begins, because Lewis was 3-tenths slower than his Q2 lap in the final part of qualifying, after the track had ramped to its peak performance all weekend. Lewis was furious after qualifying and seemed to blame the team for some "weird things" that meant he was significantly slower than George. Well it didn't take long for TeamLH to start doing some digging and found out that Lewis' tyres were at a lower-than-optimal temperature as he left the garage, and that perhaps they were turning down the ERS deployment, and a whole host of other things. Honestly, I think Lewis just made a mistake and wasn't as fast as he was in Q2. Out of nowhere, however, Mercedes teammate George Russel popped it on pole with a 1:12:000, only to be joined on the last of his laps by reigning champion Max Verstappen with exactly the same time. I believe this is only the second time in history that this has ever happened. The pair were joined at the front by the McLaren duo and Daniel Ricciardo, who caught some hate from a former champion earlier in the weekend who questioned why the Australian driver was still in the sport, perhaps he should catch some hate more often because it really worked out for him.

In [ ]:
wio.outputs_qualifying_data(
    year=year,
    race=race)
Pos No Driver Car Q1 Q2 Q3 Laps
1 63 George Russell RUS Mercedes 1:13.013 1:11.742 1:12.000 26
2 1 Max Verstappen VER Red Bull Racing Honda RBPT 1:12.360 1:12.549 1:12.000 27
3 4 Lando Norris NOR McLaren Mercedes 1:12.959 1:12.201 1:12.021 25
4 81 Oscar Piastri PIA McLaren Mercedes 1:12.907 1:12.462 1:12.103 29
5 3 Daniel Ricciardo RIC RB Honda RBPT 1:13.240 1:12.572 1:12.178 25
6 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 1:13.117 1:12.635 1:12.228 23
7 44 Lewis Hamilton HAM Mercedes 1:12.851 1:11.979 1:12.280 26
8 22 Yuki Tsunoda TSU RB Honda RBPT 1:12.748 1:12.303 1:12.414 24
9 18 Lance Stroll STR Aston Martin Aramco Mercedes 1:13.088 1:12.659 1:12.701 25
10 23 Alexander Albon ALB Williams Mercedes 1:12.896 1:12.485 1:12.796 26
11 16 Charles Leclerc LEC Ferrari 1:13.107 1:12.691 21
12 55 Carlos Sainz SAI Ferrari 1:13.038 1:12.728 22
13 2 Logan Sargeant SAR Williams Mercedes 1:13.063 1:12.736 22
14 20 Kevin Magnussen MAG Haas Ferrari 1:13.217 1:12.916 16
15 10 Pierre Gasly GAS Alpine Renault 1:13.289 1:12.940 18
16 11 Sergio Perez PER Red Bull Racing Honda RBPT 1:13.326 11
17 77 Valtteri Bottas BOT Kick Sauber Ferrari 1:13.366 10
18 31 Esteban Ocon OCO Alpine Renault 1:13.435 11
19 27 Nico Hulkenberg HUL Haas Ferrari 1:13.978 10
20 24 Zhou Guanyu ZHO Kick Sauber Ferrari 1:14.292 11

Race Report¶

The race itself started in a weird wet condition where it was just about the crossover between the wet tyres and the intermediate tyres. That meant that we had most of the field starting on the intermediate tyre getting away and up to speed slowly, but we then had the two Haas drivers on wets storming through the field in the early stages. It looked, for a while, like Kevin Magnussen could actually lead the race, but sadly just as he arrived on the scene of the top 3, the track changed back to intermediates and he was forced to box for a change of tyres. George Russell held on to the lead for the first part of the race, holding back a charging Verstappen and Norris behind. Lando held on to his tyres the best out of those three and as the track began to dry, the McLaren came alive. Lando quickly dispatched of the reigning champion and launched an attack on Russell just as he was about to pit. An early safety car caused by Sargeant spinning in the first sector put the Brit at a disadvantage, but once again he was able to look after his tyres the best and launched an attack on Verstappen and Russell ahead. He tried to pull off a massive over-cut in the transition from wet to dry, which unfortunately didn't pan out. From there, Verstappen just stretched his legs and pulled away.

Sergio Perez had a bit of a disaster race. After making contact with Pierre Gasly on the opening lap, the Mexican driver's day went from bad to worse as he span in the drying conditions and lost his rear wing. The team were heard over the radio asking him to bring the car back as they didn't want a safety car, which they were later fined for. Sergio himself was handed a grid penalty for the next race for driving in an unsafe condition. After signing that contract for an extension at the reigning champions, Sergio really needs to start acting like he's driving for a championship winning team and putting in the performances we expect. He wasn't the only driver to have an absolute shocker this weekend though. After the highs of Monaco, both Ferrari drivers struggled all weekend long. Charles Leclerc reported an engine issue, boxed for dries too early, reset the engine and ended up retiring the car because of the gap between himself and the rest of the field. Carlos Sainz span in much the same way as Perez and was collected by Alex Albon, his rumoured future teammate.

The fight at the end was between McLaren and Mercedes, surprisingly. With both Russell, Norris, and Hamilton fighting over that last step on the podium. Things got pretty intense when Russell attempted an overtake and fell behind his teammate, leading to a very tense team radio in the dying stages as George was told he was allowed to race the seven-time champion. Lewis later reported that it was his worst race ever, which is just him being over-dramatic. Norris managed to bring it home in second, with George in third. Lewis made it to fourth ahead of Oscar Piastri, who just didn't seem like he was on the pace of his teammate ahead. They were followed by the only man who seemed to enjoy the race, Fernando Alonso. He was very animated about how good the race was in the interview pen afterwards.

A couple of standout performances from Daniel Ricciardo, who kept it all together in the race unlike his teammate Yuki Tsunoda, who gave us one of the closest non-incidents I've ever seen with Nico Hulkenberg as he span in the dying stages of the race. Yuki really needs to show that level-headed consistency of a top team driver if he ever wants to be considered for that Red Bull promotion. Lance Stroll similarly had a good race as he pulled off another one of those quiet but progressive races to finish inside the points just behind his teammate. Guanyu Zhou was the only driver to finish a lap down, even after two safety car periods. The Chinese driver has just not been on form of late and isn't showing that he is the driver Audi should put their backing into for the future. If he wants to be taken seriously, he needs to start beating Bottas, who is very much in his Raikkonen phase at the minute.

In [ ]:
wio.outputs_race_result(
    year=year,
    race=race)
Pos No Driver Car Laps Time/Retired PTS
1 1 Max Verstappen VER Red Bull Racing Honda RBPT 70 1:45:47.927 25
2 4 Lando Norris NOR McLaren Mercedes 70 +3.879s 18
3 63 George Russell RUS Mercedes 70 +4.317s 15
4 44 Lewis Hamilton HAM Mercedes 70 +4.915s 13
5 81 Oscar Piastri PIA McLaren Mercedes 70 +10.199s 10
6 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 70 +17.510s 8
7 18 Lance Stroll STR Aston Martin Aramco Mercedes 70 +23.625s 6
8 3 Daniel Ricciardo RIC RB Honda RBPT 70 +28.672s 4
9 10 Pierre Gasly GAS Alpine Renault 70 +30.021s 2
10 31 Esteban Ocon OCO Alpine Renault 70 +30.313s 1
11 27 Nico Hulkenberg HUL Haas Ferrari 70 +30.824s 0
12 20 Kevin Magnussen MAG Haas Ferrari 70 +31.253s 0
13 77 Valtteri Bottas BOT Kick Sauber Ferrari 70 +40.487s 0
14 22 Yuki Tsunoda TSU RB Honda RBPT 70 +52.694s 0
15 24 Zhou Guanyu ZHO Kick Sauber Ferrari 69 +1 lap 0
NC 55 Carlos Sainz SAI Ferrari 52 DNF 0
NC 23 Alexander Albon ALB Williams Mercedes 52 DNF 0
NC 11 Sergio Perez PER Red Bull Racing Honda RBPT 51 DNF 0
NC 16 Charles Leclerc LEC Ferrari 40 DNF 0
NC 2 Logan Sargeant SAR Williams Mercedes 23 DNF 0

Fastest Lap¶

Fastest lap this week goes to Lewis Hamilton, who took the fastest lap of the race (a time of 1:14:856) on lap 70 whilst chasing down Russell and Norris ahead. Lewis securing back-to-back fastest laps within a few tenths of each other at different tracks is quite impressive, even though it was his worst race ever.

In [ ]:
wio.outputs_fastest_lap(
    year=year,
    race=race)
Pos No Driver Car Lap Time of day Time Avg Speed
1 44 Lewis Hamilton HAM Mercedes 70 15:49:04 1:14.856 209.730
2 63 George Russell RUS Mercedes 70 15:49:03 1:14.895 209.621
3 4 Lando Norris NOR McLaren Mercedes 67 15:45:15 1:15.558 207.782
4 1 Max Verstappen VER Red Bull Racing Honda RBPT 70 15:48:59 1:15.569 207.751
5 81 Oscar Piastri PIA McLaren Mercedes 65 15:42:46 1:16.247 205.904
6 14 Fernando Alonso ALO Aston Martin Aramco Mercedes 70 15:49:16 1:16.303 205.753
7 20 Kevin Magnussen MAG Haas Ferrari 68 15:46:56 1:16.499 205.226
8 27 Nico Hulkenberg HUL Haas Ferrari 67 15:45:39 1:16.683 204.733
9 18 Lance Stroll STR Aston Martin Aramco Mercedes 70 15:49:23 1:16.762 204.523
10 31 Esteban Ocon OCO Alpine Renault 70 15:49:29 1:17.012 203.859
11 10 Pierre Gasly GAS Alpine Renault 70 15:49:29 1:17.013 203.856
12 3 Daniel Ricciardo RIC RB Honda RBPT 68 15:46:53 1:17.076 203.689
13 77 Valtteri Bottas BOT Kick Sauber Ferrari 65 15:43:03 1:17.250 203.231
14 22 Yuki Tsunoda TSU RB Honda RBPT 70 15:49:52 1:17.309 203.075
15 24 Zhou Guanyu ZHO Kick Sauber Ferrari 68 15:48:35 1:17.325 203.033
16 11 Sergio Perez PER Red Bull Racing Honda RBPT 51 15:21:42 1:18.819 199.185
17 55 Carlos Sainz SAI Ferrari 51 15:21:38 1:18.957 198.837
18 23 Alexander Albon ALB Williams Mercedes 51 15:21:38 1:19.359 197.830
19 16 Charles Leclerc LEC Ferrari 39 15:05:48 1:26.012 182.528
20 2 Logan Sargeant SAR Williams Mercedes 19 14:33:21 1:26.484 181.531

Fantasy League Scores¶

Lineup Scores¶

Ok I think I have waffled enough, let's see what this race has done to the fantasy league standings. First let's begin with the driver/team points for the grid. The data you see below are the current total points and values for each driver and team. Values are taken going into the race and updated for next race after I submit the report.

In [ ]:
weekly_scores = {
    "Name": ["Points", "Value"],
    "Race": [f'{race}'],
    "Ocon": [41, 9.2],
    "Gasly": [41, 8.1],
    "Stroll": [38, 13.2],
    "Alonso": [91, 16.4],
    "Leclerc": [248, 23.6],
    "Sainz": [190, 21.6],
    "Bearman": ["N/A", "N/A"],
    "Magnussen": [43, 8.9],
    "Hulkenberg": [34, 7.8],
    "Bottas": [19, 7.5],
    "Guanyu": [42, 7.4],
    "Norris": [223, 25.6],
    "Piastri": [166, 21.3],
    "Hamilton": [122, 19.4],
    "Russell": [148, 20.5],
    "Tsunoda": [47, 9.8],
    "Ricciardo": [8, 9.1],
    "Verstappen": [301, 30.5],
    "Perez": [161, 22.9],
    "Albon": [-16, 8.3],
    "Sargeant": [0, 5.8],
    "Alpine": [97, 8.6],
    "Aston Martin": [184, 15.2],
    "Ferrari": [538, 23.1],
    "Haas": [103, 9.0],
    "Kick Sauber": [65, 6.8],
    "McLaren": [445, 25.5],
    "Mercedes": [365, 21.6],
    "RB": [104, 9.3],
    "Red Bull": [624, 28.8],
    "Williams": [1, 6.5]}
root = Path().absolute()
if Path(f'{root}/Data/{year}/Lineup/{race}_Results.json').is_file():
    pass
else:
    io.save_json_dicts(
        out_path=Path(f'{root}/Data/{year}/Lineup_Weekly.json'),
        dictionary=weekly_scores)
subprocess.run(["python", "lineup.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'lineup.py', '2024'], returncode=0)

Lando Norris is the highest scorer this week, taking a mega 40 points ahead of Verstappen in second with 37. Unsurprising that those two are the top scorers given their finishing positions but I think Lando was helped by more places gained during the race. The two Mercedes boys are next with Hamilton outscoring Russell 32 to 27 on his worst race ever. He does have a point as George is winning 8-1 in qualifying and 7-2 in the race, but he's outscoring him in the fantasy league. Nico Hulkenberg rounds out the top five with 19 points. Logan Sargeant assumes his place back at the bottom of the weekly scores with -19 points, closely followed by Sergio Perez with -17 after that poor qualifying and a DNF. They're followed by the Ferrari boys who bring home -16 points each and Alex Albon with -12 points. Yuki Tsunoda rounds out the bottom five with 0 points scored this weekend.

Mercedes are on the top step this weekend with their new upgrades bringing some good results, the former champs bring home 74 points ahead of McLaren in second with 57 points. Aston Martin round out the top three with 38 points. Williams are at the bottom this week, only managing -26 points. Ferrari make the bottom three this week, next, with -16 points, and Kick Sauber round out the bottom three with 13 points.

Max Verstappen assumes his position back at the top of the table with 301 points ahead of Charles Leclerc in second with 248 points. Lando is slowly reeling them back in in third place with 223 points, ahead of Carlos Sainz in fourth with 190 points. Oscar Piastri makes it into the top five ahead of Perez with 166 points. Alex Albon remains in the negative at the bottom of the table with -16 points, and he's joined by teammate Logan Sargeant with a huge 0 points in second. Daniel Ricciardo is next up with 8 points, just behind Bottas with 19 points. Nico Hulkenberg rounds out the bottom five with 34 points.

Red Bull eek out their advantage at the top again with 624 points ahead of Ferrari and McLaren in second and third with 538 and 445 points, respectively. Williams are almost back into the negative in last place with 1 point, behind Kick Sauber and Alpine with 65 and 97 points, respectively.

In [ ]:
points_files = [
    'Driver_Points_Bar.png',
    'Team_Points_Bar.png',
    'Driver_Sum Points.png',
    'Team_Sum Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Verstappen continues to be the most expensive selection of the entire field with a value of $30.5. Norris is now on $25.6 and Leclerc in third on $23.6. Perez's value is still dropping with $22.9 and Sainz rounds out the top five with a value of $21.6. Sargeant still represents your cheapest driver option with a value of $5.8. The two Kick drivers are next with values $7.4 and $7.5 for Zhou and Bottas. Nico Hulkenberg is next with a value of $7.8, and Pierre Gasly rounds out the cheapest five with a value of $8.1.

Red Bull is still your most expensive option, though it has remained constant this week, with a value of $28.8. McLaren are second with a value of $25.5 and Ferrari third with a value of $23.1. Williams are still your cheapest team with a value of $6.5, Kick next with a value of $6.8, and Alpine are your third cheapest with a value of $8.6.

All values given in millions of dollars.

In [ ]:
average_files = [
    'Driver_Values_Bar.png',
    'Team_Values_Bar.png',
    'Driver_Average Points.png',
    'Team_Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in average_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Your best value for money this week was none other than Nico Hulkenberg, who comes in with a ppv of 2.44 ppm, leaps ahead of the Alpine pair Esteban Ocon and Pierre Gasly with 1.74 ppm and 1.72 ppm, respectively. Lewis Hamilton's value has taken a drop recently, meaning he was fourth with 1.65 ppm, and Kevin Magnussen returns to form with a 1.57 ppm. Logan Sargeant was your worst option this week with -3.28 ppm, followed by teammate Alex Albon with -1.45 ppm. Sergio Perez's poor form continues with -0.74 ppm, tied with Carlos Sainz. Charles Leclerc next up with -0.68 ppm, and Yuki Tsunoda brings home a 0 ppm.

Haas were your best value for money, constructor wise, this week with a 3.74 ppm. Alpine were pretty close in second with 3.6 ppm and Mercedes return to form with 3.43 ppm. Williams brought home a terrible -4.0 ppm, with Ferrari also negative with -0.69 ppm. Red Bull round out the bottom three with 0.87 ppm.

ppm = points per million dollars.

In [ ]:
ppv_files = [
    'Driver_Points Per Value_Bar.png',
    'Team_Points Per Value_Bar.png',
    'Driver_Average Points Per Value.png',
    'Team_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [Path(f'{directory_path}/{race}_{file}') for file in ppv_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]
In [ ]:
subprocess.run(["python", "manager.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'manager.py', '2024'], returncode=0)

Manager Scores¶

It's time to see what the scores are looking like in the fantasy league between all of you. It's a new weekly winner at the top with Sam CJ, joined by Andrew, at the top with Mirror, Signal, Manoeuvre and Forced To Pick Max coming in with 195 points. They pip rookie manager Adam by 1 point, with their team Just Win Init coming in in second place. Another 1 point back in third is Andrew again with I simp for Zak Brown. In fourth place we have Jake with A Sauber or Kick or Stake with 189 points, they're tied with Tim and Lights Out, Got Punched. Pete rounds out the top five with Lightning McCars and 188 points. Very close there in the top five, and none of the "big players" making an appearance.

Down in the dumps this week is Phil and BWM Motorrad coming home with -40 points, ahead of Pierce and Grazzi#44 with -36. They're joined by Stuart and E l'ora del martello with -17 points, just ahead of Toby and Hesketh 2.1 with -15 points. Rounding out the bottom five is our first Golf League team, manager James and Bwoah Rolex Sipsmith Golf are in fifth with 0 points.

Stefanus continues to hold on to the top three positions in the league with their teams Haryanto, Syahrul, and Gelael sitting on 210y7, 1978, and 1835 points respectively. They're ahead of Patrick and Johnny UniHaas with 1834, and a strong week from Sam CJ and Mirror, Signal, Manoeuvre sees them hit the tail end of the top five with 1787 points.

Patrick and Racing No Points continue their dominance of the Golf League with 274 points ahead of Will and The Big One with 309. Joe and Alpine Sandbags make it back onto the podium with 337 points, ahead of Stuart and Ferrari Strategists with 358. Andrew and sBinnala Yacht Club round out the bottom five with 360 points.

Out biggest winner this week is Tim and Lights Out, Got Punched, the rookie manager gained 9 places this week. Pete and their teams Squeshed Nintendo Racing and Lightning McCars gain 8 places each. Tom, Matty, and Jake with their teams Toasted Eggs, The Lizard Queen, and One Red Bull Car & Gasly all gain 7 places to round out the top three. Our biggest loser this week is Pierce and their team Grazzi#44 who drop 12 places. Phil is in the mix too with BMW Motorrad dropping 10 places. Joe and kicktwitchyoutubepremium also suffer a massive 8 place drop to round out the bottom three.

In [ ]:
team_files = [
    'LeagueTeams_Points_Bar.png',
    'LeagueTeams_Sum Points_Bar.png',
    'LeagueTeams_Sum Points.png',
    'LeagueTeams_PositionsGained_Bar.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in team_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

AWAITING TEAM VALUE FIX

In [ ]:
team_files = [
    'LeagueTeams_Values_Bar.png',
    'LeagueTeams_Sum Values.png',
    'LeagueTeams_Points Per Value_Bar.png',
    'LeagueTeams_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in team_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Stefanus is currently leading the way for total points as a manager, not a surprise given the rookie sensation is currently in the top three spots of the championship standings. Close behind is Josh, the pair are on 5920 and 4674 points, respectively. They're followed by Sebastian who has 4653 points. Our lowest three-team manager is Pierce with 2532 points across all there teams.

Sam CJ takes the highest average points this week, with their only team, sitting on 195 points. Tim is next with an average score of 189 points. Jake rounds out the top three with an average of 164.67. Toby is our worst manager of the week with an average score of -15 points. Ahead of them is Pierce with 44.5 points and Patrick with 45 points exactly.

In [ ]:
manager_files = [
    'LeagueManagers_Sum Points_Bar.png',
    'LeagueManagers_Sum Points.png',
    'LeagueManagers_Average Points_Bar.png',
    'LeagueManagers_Sum Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in manager_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Manager if tge week this week is Tim who comes in with a points per value of 1.83 ppm, ahead of Andrew with 1.75 ppm and Sam CJ with 1.69 ppm. Toby is of course our worst manager of the week with a point per value of -0.13 ppm. He's closely followed by Pierce with 0.41 ppm and Phil with 0.49 ppm.

In [ ]:
manager_files = [
    'LeagueManagers_Sum Values.png',
    'LeagueManagers_Average Values_Bar.png',
    'LeagueManagers_Points Per Value_Bar.png',
    'LeagueManagers_Average Points Per Value.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in manager_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None]

Max Verstappen just edges out Yuki Tsunoda and Nico Hulkenberg as the most used driver this week, the reigning champion topping in at 29 of the 65 selections available. The other two are close behind with 28 selections each. The Williams pairing of Logan Sargeant and Alex Albon are next in your weekly choices, coming in at 24 a piece. Then we have Charles Leclerc and Valtteri Bottas taking 21 of the 65 selections, with Kick teammate Guanyu Zhou and Pierre Gasly rounding out the top five with 19 selections. Oliver Bearman is still out there in the wild somewhere, making 2 of the 65 selections. George Russell and Lance Stroll are next with only 7 of you selected them for your team. Carlos Sainz, Sergio Perez, and Lewis Hamilton can only manage 8. Oscar Piastri is a lonely fourth with only 10 selections, while Esteban Ocon rounds out the bottom five with just 12 of 65 teams running him in their lineup.

Ferrari are still the team of choice amongst many of you, with 30 teams running the Italian Constructor this week. Next is RB who make 19 of the selections, and Haas round out the top three with 17 selections. Alpine are still your least favourite with only 5 selections, closely followed by Aston Martin with 6. Mercedes round out the bottom three, though I suspect that might change soon, the former powerhouse only managing 9 selections.

Max's DRS Boost tally continues to rise this week, with 26 of you selecting him as your double scorer, surprising that 3 of you still don't have him boosted. He's followed by Leclerc with 15 and Norris with 10. No extra DRS tokens this week, but we did have 2 auto pilots, 1 wildcard, and 1 no negative. Can't be many of those tokens lying around anymore so we will probably now start to see the tactical ones being played.

In [ ]:
count_files = [
    'LeagueCounts_Driver_Bar.png',
    'LeagueCounts_Constructor_Bar.png',
    'LeagueCounts_DRS Boost_Bar.png',
    'LeagueCounts_Extra DRS_Bar.png',
    'LeagueCounts_Perks_Bar.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in count_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None, None]
In [ ]:
count_files = [
    'LeagueSumCounts_Driver.png',
    'LeagueSumCounts_Constructor.png',
    'LeagueSumCounts_DRS Boost.png',
    'LeagueSumCounts_Extra DRS.png',
    'LeagueSumCounts_Perks.png']
directory_path = Path(f'{root}/Data/{year}/Figures/{race}')
file_paths = [
    Path(f'{directory_path}/{race}_{file}') for file in count_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None, None, None]

For more figures, please see the Facebook group album.

In [ ]:
subprocess.run(["python", "league_prizes.py", f'{year}'])
Out[ ]:
CompletedProcess(args=['python', 'league_prizes.py', '2024'], returncode=0)

Prizes¶

Canada marks the fourth race of the seven included in The Continental, the highest scores across 7 races across the continents of the calendar. This means we are now in the latter stages of this award and we can get a better idea about who is going to be taking that prize. It is still all to play for as we have Stefanus and Haryanto leading the way with 871 points ahead of Jake and One Red Bull Car & Gasly in second with 758. Next is Stefanus and Syahrul with 732, ahead of Matty and The Lizard Queen with 715. Sam CJ rounds out the top five with Mirror, Signal, Manoeuvre with 683 points. With three races left to go, it could go any way, who has saved up their tokens for this one? Well we have a triple header coming up soon, which includes the British Grand Prix (another race in this prize), so we won't have to wait much longer to find out if anyone can take it to Stefanus.

Spain next, which is "Madrid Will Be Better", the lowest score at the Spanish Grand Prix, another spot prize! That's right, every single weekend is a prize weekend, so get your teams in order if you're one for the lowest prizes.

In [ ]:
directory_path = Path(f'{root}/Data/{year}/Figures/Prizes')
file_paths = [
    Path(f'{directory_path}/{file}') for file in
    os.listdir(directory_path) if f'{race}' in file]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None]

F1 Play¶

We have a new entry into the F1 play league this week, latecomer Tim has joined the party. I won't go back and correct previous weeks, but he has entered all of the races so there is a score to count. Our weekly winner this week is Josh with a huge 7/10 predictions correct. Stuart was close behind with 5/10, Matty in third with 3/10, and Tim brings in 2/10.

That takes the scores to:

Stuart - 24

Josh - 31

Matty - 15

Tim - 21

In [ ]:
F1_play = {
    "Stuart S": [3, 5, 2, 4, 0, 2, 0, 3, 5],
    "Matty J": [2, 2, 0, 0, 3, 3, 0, 2, 3],
    "Josh M": [2, 3, 2, 6, 3, 3, 3, 2, 7],
    "Tim W": [0, 3, 3, 0, 2, 3, 4, 4, 2]}
io.save_json_dicts(
    out_path=Path(f'{root}/Data/{year}/F1_Play.json'),
    dictionary=F1_play)
subprocess.run(["python", "F1_play.py", f'{year}'])
points_files = [
    'Points.png',
    'Sum Points.png',
    'Average Points.png']
directory_path = Path(f'{root}/Data/{year}/Figures/F1_Play')
file_paths = [Path(f'{directory_path}/{race}_F1Play_{file}') for file in points_files]
[io.display_img(file_path=path, width=1200, height=720) for path in file_paths]
No description has been provided for this image
No description has been provided for this image
No description has been provided for this image
Out[ ]:
[None, None, None]

Next Up¶

Next up, Spain. The Spanish Grand Prix marks the start of a triple-header including Austria and Great Britain. Back into the European season and heading towards the summer break. Spain was classically a testing circuit and many of the teams have banks and banks of data to use to their advantage. However, we haven't really had much testing there with the new cars, and the track has changed in recent years to remove the final chicane. It is usually quite heavy on tyre wear and has brought some interesting strategic races in recent memory. Not much longer before we get a new Spanish Grand Prix, so let's try to enjoy the one we have for now.